package com.qltv.service;

import java.util.Date;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.apache.log4j.Logger;

import com.qltv.message.resp.TextMsg;
import com.qltv.utils.MsgUtil;

/**
 * 
 * 类名：CoreService
 * 描述：核心服务类
 * @author telnet
 * 创建时间：2018年1月10日
 */
public class CoreService {
	private static final Logger logger = Logger.getLogger(CoreService.class);
	/**
	 * 处理微信发来的请求
	 * @param request
	 * @return
	 */
	public static String processRequest(HttpServletRequest request){
		//xml格式的消息数据
		String respXml = null;
		//默认返回的文本消息内容
		String respContent = "未知的消息类型";
		try {
			//调用parseXml方法解析请求消息
			Map<String,String> requestMap = MsgUtil.parseXml(request);
			//发送方账号
			String fromUserName = requestMap.get("FromUserName");
			//开发者微信号
			String toUserName = requestMap.get("ToUserName");
			//消息类型
			String msgType= requestMap.get("MsgType");
			
			//回复文本消息
			TextMsg textMessage = new TextMsg();
			textMessage.setFromUserName(toUserName);
			textMessage.setToUserName(fromUserName);
			textMessage.setCreateTime(new Date().getTime());
			textMessage.setMsgType(MsgUtil.RESP_MESSAGE_TYPE_TEXT);
			
			if(msgType.equals(MsgUtil.REQ_MESSAGE_TYPE_TEXT)){
				respContent = "您发送的是文本消息，功能正在制作中，想知道什么都可以查询。。。 (#^.^#)";
			}
			//图片消息
			else if(msgType.equals(MsgUtil.REQ_MESSAGE_TYPE_IMAGE)){
				respContent = "您发送的是图片消息";
			}
			//语音消息
			else if(msgType.equals(MsgUtil.REQ_MESSAGE_TYPE_VOICE)){
				respContent = "您发送的是语音消息";
			}
			//视频消息
			else if(msgType.equals(MsgUtil.REQ_MESSAGE_TYPE_VIDEO)){
				respContent = "您发送的是视频消息";
			}
			//短视频
			else if(msgType.equals(MsgUtil.REQ_MESSAGE_TYPE_SHORTVIDEO)){
				respContent = "您发送的是短视频消息";
			}
			//地理位置消息
			else if(msgType.equals(MsgUtil.REQ_MESSAGE_TYPE_LOCATION)){
				respContent = "您发送的是地理位置信息";
			}
			//链接消息
			else if(msgType.equals(MsgUtil.REQ_MESSAGE_TYPE_LINK)){
				respContent = "您发送的是链接消息";
			}
			//事件推送
			else if(msgType.equals(MsgUtil.REQ_MESSAGE_TYPE_EVENT)){
				//事件类型
				String eventType = requestMap.get("Event");
				//关注
				if(eventType.equals(MsgUtil.EVENT_TYPE_SUBSCRIBE)){
					respContent = "非常感谢您的关注";
				}
				//取消关注
				else if(eventType.equals(MsgUtil.EVENT_TYPE_UNSUBSCRIBE)){
					// TODO 取消订阅后用户不会再收到公众账号发送的消息，因此不需要回复
				}
				//扫描带参数二维码
				else if(eventType.equals(MsgUtil.EVENT_TYPE_SCAN)){
					// TODO 处理扫描带参数二维码事件
				}
				//上报地理位置
				else if(eventType.equals(MsgUtil.EVENT_TYPE_LOCATION)){
					// TODO 处理上报地理位置事件
				}
				//自定义菜单
				else if(eventType.equals(MsgUtil.EVENT_TYPE_CLICK)){
					// TODO 处理菜单点击事件
					String eventKey = requestMap.get("EventKey");
					if(eventKey.equals("21")){
						respContent = "党建系统正在制作当中。。。";
					}else if (eventKey.equals("11")){
						respContent = new Date().toLocaleString() + "天气不错 ^_^  功能正在制作中。。。";
					}
				}
			}
			//设置文本消息的内容
			textMessage.setContent(respContent);
			logger.info("[[["+textMessage.getFromUserName()+"]]]");
			logger.info("[[["+textMessage.getToUserName()+"]]]");
			logger.info("[[["+textMessage.getContent()+"]]]");
			logger.info("[[["+textMessage.getCreateTime()+"]]]");
			logger.info("[[["+textMessage.getMsgType()+"]]]");
			//将文本消息对象转换成xml
			respXml = MsgUtil.messageToXml(textMessage);
		} catch (Exception e) {
			e.printStackTrace();
		}
		//logger.info("CoreService处理后--->"+respXml);
		return respXml;
	}

}
